Heap
Zur Laufzeit dynamisch Speicher vom Heap anfordern
// aus stdlib.h
// alloziert "size" Bytes vom Heap und gibt die Start Adresse zurück
void *malloc(size_t size);
// alloziert "nitems" mal "size" Bytes, setzt sie auf 0, und gibt die Adresse zurück void *calloc(size_t nitems, size_t size);
// vergrössert (oder verkleinert) einen vorgängig angeforderten Speicherbereich
void *realloc(void *ptr, size_t size);
// gibt einen oben angeforderten Speicherbereich frei
void free(void *ptr);
Beispiel
#include <stdlib.h>
typedef struct {
char firstName[30];
char lastName[30];
} Person;
Person* pointerToPerson = (Person*)malloc(sizeof(Person));
if (pointerToPerson == NULL) {
// Etwas ist schief gelaufen. Pointer kann NICHT verwendet werden!!
return;
}
// Wandlung in Person, dann firstname setzen
strcpy((*pointerToPerson).firstName, "firstname");
// Direkter Speicherzugriff
strcpy(pointerToPerson->lastName, "lastName");
printf("%s", pointerToPerson->firstName);
printf("%s", (*pointerToPerson).lastName);
//GANNZ WICHTIG
free(pointerToPerson); // Speicherplatz wieder frei geben
Probleme
Buffer Overflow
- z.B. Schreiben von 21 Zeichen langem String in 20 Zeichen langen Array,